home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / MacPNG Library 1.02 / pngMacSrc 1.02 / PNG Library 0.80 / PNGTEST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-29  |  3.6 KB  |  191 lines  |  [TEXT/CWIE]

  1. /* pngtest.c - a simple test program to test libpng 
  2.  
  3.    libpng 1.0 beta 2 - version 0.8
  4.    For conditions of distribution and use, see copyright notice in png.h
  5.    Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
  6.    August 20, 1995
  7.    */
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include "png.h"
  12.  
  13. #ifdef __TURBOC__
  14. #include <mem.h>
  15. #endif
  16.  
  17. /* defined so I can write to a file on gui/windowing platforms */
  18. #define STDERR stderr
  19.  
  20. /* input and output filenames */
  21. char inname[] = "pngtest.png";
  22. char outname[] = "pngout.png";
  23.  
  24. png_struct read_ptr;
  25. png_struct write_ptr;
  26. png_info info_ptr;
  27. png_info end_info;
  28.  
  29. char inbuf[256], outbuf[256];
  30.  
  31. int main()
  32. {
  33.     FILE *fpin, *fpout;
  34.     png_byte *row_buf;
  35.     png_uint_32 rowbytes;
  36.    png_uint_32 y;
  37.     int channels, num_pass, pass;
  38.  
  39.     row_buf = (png_byte *)0;
  40.  
  41.    fprintf(STDERR, "Testing libpng version %s\n", PNG_LIBPNG_VER_STRING);
  42.  
  43.    if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING))
  44.    {
  45.       fprintf(STDERR,
  46.          "Warning: versions are different between png.h and png.c\n");
  47.       fprintf(STDERR, "  png.h version: %s\n", PNG_LIBPNG_VER_STRING);
  48.       fprintf(STDERR, "  png.c version: %s\n\n", png_libpng_ver);
  49.    }
  50.  
  51.     fpin = fopen(inname, "rb");
  52.     if (!fpin)
  53.     {
  54.         fprintf(STDERR, "Could not find input file %s\n", inname);
  55.         return 1;
  56.     }
  57.  
  58.     fpout = fopen(outname, "wb");
  59.     if (!fpout)
  60.     {
  61.         fprintf(STDERR, "could not open output file %s\n", outname);
  62.         fclose(fpin);
  63.         return 1;
  64.     }
  65.  
  66.     if (setjmp(read_ptr.jmpbuf))
  67.     {
  68.         fprintf(STDERR, "libpng read error\n");
  69.         fclose(fpin);
  70.         fclose(fpout);
  71.         return 1;
  72.     }
  73.  
  74.     if (setjmp(write_ptr.jmpbuf))
  75.     {
  76.         fprintf(STDERR, "libpng write error\n");
  77.         fclose(fpin);
  78.         fclose(fpout);
  79.         return 1;
  80.     }
  81.  
  82.     png_read_init(&read_ptr);
  83.     png_write_init(&write_ptr);
  84.     png_info_init(&info_ptr);
  85.     png_info_init(&end_info);
  86.  
  87.     png_init_io(&read_ptr, fpin);
  88.     png_init_io(&write_ptr, fpout);
  89.  
  90.     png_read_info(&read_ptr, &info_ptr);
  91.     png_write_info(&write_ptr, &info_ptr);
  92.  
  93.     if ((info_ptr.color_type & 3) == 2)
  94.         channels = 3;
  95.     else
  96.         channels = 1;
  97.     if (info_ptr.color_type & 4)
  98.         channels++;
  99.  
  100.     rowbytes = ((info_ptr.width * info_ptr.bit_depth * channels + 7) >> 3);
  101.     row_buf = (png_byte *)malloc((size_t)rowbytes);
  102.     if (!row_buf)
  103.     {
  104.         fprintf(STDERR, "no memory to allocate row buffer\n");
  105.         png_read_destroy(&read_ptr, &info_ptr, (png_info *)0);
  106.         png_write_destroy(&write_ptr);
  107.         fclose(fpin);
  108.         fclose(fpout);
  109.         return 1;
  110.     }
  111.  
  112.     if (info_ptr.interlace_type)
  113.     {
  114.         num_pass = png_set_interlace_handling(&read_ptr);
  115.         num_pass = png_set_interlace_handling(&write_ptr);
  116.     }
  117.     else
  118.     {
  119.         num_pass = 1;
  120.     }
  121.  
  122.     for (pass = 0; pass < num_pass; pass++)
  123.     {
  124.         for (y = 0; y < info_ptr.height; y++)
  125.         {
  126.             png_read_rows(&read_ptr, &row_buf, (png_byte **)0, 1);
  127.             png_write_rows(&write_ptr, &row_buf, 1);
  128.         }
  129.     }
  130.  
  131.     png_read_end(&read_ptr, &end_info);
  132.     png_write_end(&write_ptr, &end_info);
  133.  
  134.     png_read_destroy(&read_ptr, &info_ptr, &end_info);
  135.     png_write_destroy(&write_ptr);
  136.  
  137.     fclose(fpin);
  138.     fclose(fpout);
  139.  
  140.     free(row_buf);
  141.  
  142.     fpin = fopen(inname, "rb");
  143.  
  144.     if (!fpin)
  145.     {
  146.         fprintf(STDERR, "could not find file %s\n", inname);
  147.         return 1;
  148.     }
  149.  
  150.     fpout = fopen(outname, "rb");
  151.     if (!fpout)
  152.     {
  153.         fprintf(STDERR, "could not find file %s\n", outname);
  154.         fclose(fpin);
  155.         return 1;
  156.     }
  157.  
  158.     while (1)
  159.     {
  160.         int num_in, num_out;
  161.  
  162.         num_in = fread(inbuf, 1, 256, fpin);
  163.         num_out = fread(outbuf, 1, 256, fpout);
  164.  
  165.         if (num_in != num_out)
  166.         {
  167.             fprintf(STDERR, "files are of a different size\n");
  168.             fclose(fpin);
  169.             fclose(fpout);
  170.             return 1;
  171.         }
  172.  
  173.         if (!num_in)
  174.             break;
  175.  
  176.         if (memcmp(inbuf, outbuf, num_in))
  177.         {
  178.             fprintf(STDERR, "files are different\n");
  179.             fclose(fpin);
  180.             fclose(fpout);
  181.             return 1;
  182.         }
  183.     }
  184.  
  185.     fclose(fpin);
  186.     fclose(fpout);
  187.    fprintf(STDERR, "libpng passes test\n");
  188.  
  189.    return 0;
  190. }
  191.